home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xpat2-1.000 / xpat2-1 / xpat2-1.04 / src / X-pat.h < prev    next >
C/C++ Source or Header  |  1995-11-25  |  8KB  |  260 lines

  1. /*****************************************************************************/
  2. /*                                         */
  3. /*                                         */
  4. /*    X patience version 2 -- module X-pat.h                     */
  5. /*                                         */
  6. /*    Copyright (C) 1993, 1994 by Heiko Eissfeldt and Michael Bischoff     */
  7. /*    see COPYRIGHT.xpat2 for Copyright details                 */
  8. /*                                         */
  9. /*    This file is included by all sources for the X interface         */
  10. /*                                         */
  11. /*                                         */
  12. /*****************************************************************************/
  13.  
  14. #if !defined(useXlib) && !defined(useXaw) && !defined(useMotif) && !defined(useXview)
  15. #error "You must define one of useXlib, useXaw, useMotif, useXview"
  16. #endif
  17.  
  18. #include "xpat.h"
  19. #include <X11/Xlib.h>
  20. #include <X11/Xutil.h>
  21. #include <X11/Xos.h>
  22. #ifndef useXview
  23. #include <X11/Intrinsic.h>
  24. #endif
  25.  
  26. #ifdef useXaw
  27. #include <X11/StringDefs.h>
  28. #include <X11/Shell.h>
  29. #include <X11/Xaw/Cardinals.h>
  30. #include <X11/Xaw/Paned.h>
  31. #include <X11/Xaw/Box.h>    
  32. #include <X11/Xaw/Label.h>    
  33. #include <X11/Xaw/Viewport.h>
  34. #include <X11/Xaw/Command.h>
  35. #include <X11/Xaw/MenuButton.h>
  36. #include <X11/Xaw/SimpleMenu.h>
  37. #include <X11/Xaw/Dialog.h>
  38. #include <X11/Xaw/Sme.h>
  39. #include <X11/Xaw/SmeBSB.h>
  40. #include <X11/Xaw/Toggle.h>
  41. #endif
  42.  
  43. #ifdef useMotif
  44. #include <X11/StringDefs.h>
  45. #include <X11/Shell.h>
  46. #include <Xm/Xm.h>
  47. #include <Xm/PanedW.h>
  48. #include <Xm/PushB.h>
  49. #include <Xm/Label.h>
  50. #include <Xm/ScrolledW.h>
  51. #include <Xm/RowColumn.h>
  52. #include <Xm/Form.h>
  53. #include <Xm/ToggleB.h>
  54. #endif
  55.  
  56. #ifdef useXview
  57. #include <xview/xview.h>
  58. #include <xview/frame.h>
  59. #include <xview/panel.h>
  60. #include <xview/cms.h>
  61. #include <xview/canvas.h>
  62. #include <xview/defaults.h>
  63. #include <xview/svrimage.h>
  64. #include <xview/server.h>
  65. #include <xview/notice.h>
  66. #include <xview/openmenu.h>
  67. #endif
  68.  
  69. typedef unsigned int XSize_t;   /* type used by X for width and height   */
  70.                                 /* this is not consistent used by X11R5  */
  71. /* in X11R3, XSize_t was int, since R4 we seem to have a mixture of int  */
  72. /* and unsigned int! (complain!)                     */
  73.  
  74. void resize_event(XSize_t w, XSize_t h);
  75. #ifdef useXview
  76. #define soft_Resize Force_Resize
  77. #else
  78. #ifdef useXlib
  79. #define soft_Resize Force_Resize
  80. #else
  81. extern Widget toplevel;
  82. void AskWidgetForResize(XSize_t x, XSize_t y);
  83. #define soft_Resize AskWidgetForResize
  84. #endif
  85. #endif
  86.  
  87. void init_gfx(void);
  88. void init_fonts(const char *, const char *);
  89. void init_windows(int, char **, const char *, int, int, int, int,
  90.    int, int, int, const char *);
  91. void init_layout(void);
  92. void generic_minwindow(XSize_t *, XSize_t *);
  93. void init_cards(const char *, int, int, unsigned long, unsigned long, int, const char *);
  94. void PaintCard(int, int, int, int);
  95. void do_show_rules(void);
  96. void init_exposed_card(void);
  97. void show_exposed_card(boolean);
  98. #ifdef useXview
  99. void init_arrow(unsigned long, int, int);
  100. #else
  101. void init_arrow(const char *, int, int);
  102. void handle_expose_event(XExposeEvent *);
  103. #endif
  104. void init_mark(unsigned long pixel, int markwidth);
  105. void Force_Resize(XSize_t, XSize_t);
  106.  
  107. #ifdef useXview
  108. void table_events(Xv_Window, Event *);
  109. void table_resize(Canvas, int, int);
  110. void table_repaint(Canvas, Xv_Window, Rectlist *);
  111. void frame_resize(Xv_Window, Event *);
  112. void frame_pack_all(Frame);
  113. #endif
  114. /* events called from Tableau widget or from Xlib */
  115. void key_press(XKeyPressedEvent *xev);
  116. void redraw_table(XExposeEvent *xev);
  117. void button_press(XButtonPressedEvent *xev);
  118. void button_release(XButtonPressedEvent *xev);
  119. void mouse_motion(XPointerMovedEvent *xev);
  120. int main(int, char **);
  121.  
  122.  
  123. /* more abbrevs */
  124.  
  125. /* definition of a card: */
  126. /* bits 0 and 1 give the color: 0 = diamond, 1 = heart, 2 = spades, 3 = club */
  127. #define SUITSYMBOL    52    /* for empty stacks */
  128. #define CARDBACK    56
  129. #define OUTLINE         58
  130. #define NOTHING         59
  131.  
  132. #define ROUND_W        (card.rx)
  133. #define ROUND_H        (card.ry)
  134. #define CARD_WIDTH    (card.w)
  135. #define CARD_HEIGHT    (card.h)
  136. #define STD_DELTA    (card.stddelta)
  137.  
  138. extern struct graphic {
  139.     boolean is_color;           /* True, if more than one bit per pixel  */ 
  140.     boolean autolayout;         /* automatic new layout at resize events */
  141.     XSize_t width;              /* the width of the table window         */
  142.     XSize_t height;             /* the height of the table window        */
  143.     XSize_t xgap;        /* room between two cards horizontally   */
  144.     XSize_t ygap;        /* room between two cards vertically     */
  145. #ifndef useXlib
  146.     XSize_t w_width;            /* the width of the Viewport window      */
  147.     XSize_t w_height;           /* the height of the Viewport window     */
  148. #endif
  149.     XSize_t preferred_width;    /* the required width for the layout     */
  150.     XSize_t preferred_height;   /*  " height                     */
  151.     XSize_t min_width;      /* the required minwidth for these rules */
  152.     XSize_t min_height;        /*  " height                 */
  153.     struct pile {
  154.     int x;            /* x position of this pile               */
  155.     int y;            /* y position of this pile               */
  156.     int xtotal;        /* current height of pile in pixels      */
  157.     int ytotal;        /* current width of pile in pixels       */
  158.     int xmaxwidth;        /* maximum width of this pile          */
  159.     int ymaxheight;        /* maximum height of this pile          */
  160.     int xdelta;        /* x-delta value of this pile (0)        */
  161.     int delta;        /* delta value of this pile              */
  162.     } pile[MAXPILES];
  163.     int cardy[MAXCARDS];    /* y-offset of card relative to pile     */
  164.     Cardindex zoomed_card;      /* -1 or the index of an exposed card    */
  165.     int ya_w, ya_h, xa_w, xa_h;    /* arrow head dimension, set by init      */
  166.     int aw, ah;            /* width and height of an arrow      */
  167. #ifdef useXlib
  168.     int message_x;        /* start of text */
  169.     int message_y;
  170.     XSize_t buttons_height;    /* the height of the buttons (non-Xaw)     */
  171.     XSize_t message_height;    /* the height of the message window (non-Xaw) */
  172.     int yoff;            /* where the actual table starts         */
  173.     XFontStruct *message_font;
  174.     GC textgc;
  175. #endif
  176. } graphic;
  177.  
  178. #define NOT_DISPLAYED(p)       ((p)->x == -1 && (p)->y == -1)
  179.  
  180. extern struct card {
  181.     const char *cardset;        /* name of file for cards, or NULL for internals */
  182.     int rx;            /* round edge, x */
  183.     int ry;            /* round edge, y */
  184.     XSize_t w;            /* width of a card */
  185.     XSize_t h;            /* height of a card */
  186.     int stddelta;        /* standard delta */
  187.     int back_delta_x;        /* from spider */
  188.     int back_delta_y;        /* (how much to modify the TS origin by) */
  189. } card;
  190.  
  191.  
  192. #ifdef useXview
  193. extern Window table;
  194. extern Frame mainwindow;
  195. extern Panel buttonbox;
  196. extern Canvas canvas;
  197. extern Menu cmenu;
  198. extern Event *bp_event;
  199. #else
  200. extern Window table, mainwindow;
  201. #endif
  202.  
  203. extern Display *dpy;
  204. extern int screen;
  205. extern unsigned long blackpixel;
  206. extern unsigned long whitepixel;
  207. extern GC blackgc;
  208. extern GC whitegc;
  209.  
  210. #ifdef useXlib
  211. #define    TABLE_BW    2
  212. #define MAXBUTTONS    32
  213.  
  214. extern struct buttons {
  215.     int num;
  216.     int rx;            /* radius of round corner, x */
  217.     int ry;            /* radius of round corner, y */
  218.     XSize_t bx;            /* border size, x */
  219.     XSize_t by;            /* border size, y */
  220.     XFontStruct *font;
  221.     int fontheight;        /* ascend + descend */
  222.     GC gc;
  223.     struct singlebutton {
  224.     int x;
  225.     int y;
  226.         XSize_t w;
  227.         XSize_t h;
  228.         const char *text;
  229.         void (*left)(void);
  230.         void (*middle)(void);
  231.         void (*right)(void);
  232.     } b[MAXBUTTONS];
  233. } button;
  234.  
  235. extern struct singlebutton confirmbuttons[3];
  236. void (*check_button_list(struct singlebutton *p, int num,
  237.     XButtonPressedEvent *xev))(void);
  238. void event_loop(void);
  239.  
  240. #define B_ROUND_W    (button.rx)
  241. #define B_ROUND_H    (button.ry)
  242.  
  243. int arrange_buttons(struct singlebutton *, int *, int *, XSize_t, long *);
  244. void redraw_buttons(int, int, int, int, Window, int, struct singlebutton *);
  245.  
  246. extern struct confirm {
  247.     const char *text;
  248.     int x, y;
  249.     XSize_t w, h;
  250.     Window win;
  251. } confirm;
  252.  
  253. extern Window finished_win;
  254. #define FINISHED_W    100
  255. #define FINISHED_H     50
  256.  
  257. /* endif */
  258.  
  259. #endif
  260.